﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractFactory
{
    class Program
    {
        /*
         抽象工厂模式(Abstract Factory): 提供一个创建一系列相关或相互依赖对象的接口，而无需指定他们的具体的类

            抽象工厂的好处是便于交换产品系列，由于具体工厂类。 在一个应用中只需要在初始化的时候出现一次，这使
            得改变一个应用的具体工厂很容易。只需要改变具体工厂即可使用不用的产品配置。

            它让具体的创建实例过程与客户端分离，客户端是通过他们的抽象接口操纵实例，产品的具体类名也被具体工厂
            的实现分离，不会出现在代码中。

            但是抽象工厂在变更的时候虽然修改只用改变工厂类，但是工厂类多了也蛮烦，他和客户端耦合大，使用简单工
            将接口统一能让代码更好的解耦内聚。

            而简单工厂的switch 如何解决， 通过依赖注入。可以克服抽象工厂的先天不足

             */
        static void Main(string[] args)
        {
            User userTable = new User();
            IUser user = DataAccess.CreateUser();
            user.Insert(userTable);
            user.GetUser(1);

            Console.Read();
        }
    }
}
